Jaeger 是 Uber 推出的一款开源分布式追踪系统,兼容 OpenTracing API。
Jaeger 架构
如上图所示,Jaeger 主要由以下几部分组成。
- Jaeger Client - 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。
- Agent - 它是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给 collector。它被设计成一个基础组件,部署到所有的宿主机上。Agent 将 client library 和 collector 解耦,为 client library 屏蔽了路由和发现 collector 的细节。
- Collector - 接收 jaeger-agent 发送来的数据,然后将数据写入后端存储。Collector 被设计成无状态的组件,因此您可以同时运行任意数量的 jaeger-collector。
- Data Store - 后端存储被设计成一个可插拔的组件,支持将数据写入 cassandra、elastic search。
- Query - 接收查询请求,然后从后端存储系统中检索 trace 并通过 UI 进行展示。Query 是无状态的,您可以启动多个实例,把它们部署在 nginx 这样的负载均衡器后面。
Jaeger 存在的问题
- 需要架设并维护存储。
- UI比较薄弱,有一些个性化的分析需求无法快速满足(例如对比,统计延迟分布等)。
Jaeger on Aliyun Log Service
Jaeger on Aliyun Log Service 是基于 Jeager 开发的分布式追踪系统,支持将采集到的追踪数据持久化到日志服务中,并通过 Jaeger 的原生接口进行查询和展示。
优势
- 原生 Jaeger 仅支持将数据持久化到 cassandra 和 elasticsearch 中,用户需要自行维护后端存储系统的稳定性,调节存储容量。Jaeger on Aliyun Log Service 借助阿里云日志服务的海量数据处理能力,让您享受 Jaeger 在分布式追踪领域给您带来便捷的同时无需过多关注后端存储系统的问题。
- Jaeger UI 部分仅提供查询、展示 trace 的功能,对分析问题、排查问题支持不足。使用 Jaeger on Aliyun Log Service,您可以借助日志服务强大的查询分析能力,助您更快分析出系统中存在的问题。
- 相对于 Jaeger 使用 elasticsearch 作为后端存储,使用日志服务的好处是支持按量付费,成本仅为 elasticsearch 的13%。参阅自建ELK vs 日志服务(SLS)全方位对比
配置步骤
参阅:https://github.com/aliyun/jaeger/blob/master/README_CN.md
使用实例
HotROD 是由多个微服务组成的应用程序,它使用了 OpenTracing API 记录 trace 信息。
下面通过一段视频向您展示如何使用 Jaeger on Aliyun Log Service 诊断 HotROD 出现的问题。视频包含以下内容:
- 如何配置日志服务
- 如何通过 docker-compose 运行 Jaeger
- 如何运行 HotROD
- 通过 Jaeger UI 如何检索特定的 trace
- 通过 Jaeger UI 如何查看 trace 的详细信息
- 通过 Jaeger UI 如何定位应用的性能瓶颈
- 通过日志服务管理控制台,如何定位应用的性能瓶颈
- 应用程序如何使用 OpenTracing API
点击查看视频
视频中用到的查询分析样例
1. 以分钟为单位统计 frontend 服务的 HTTP GET /dispatch 操作的平均延迟以及请求个数。
2. 比较两条 trace 各个操作的耗时
3. 统计延迟大于 1.5s 的 trace 的 IP 情况
来源:https://zhuanlan.zhihu.com/p/34318538
实现了协议中的trace和span,一个traceID锁定很多span,span通过父ID串起。
可以调整采集占比,比如十分之一。
在trace开始时,即第一个client,要把traceID注入到grpc http 头。
其余span在接受grpac请求时,在http头取出traceID,写入client。
来源视频:https://www.bilibili.com/video/BV1J3411C7Sz/?spm_id_from=333.337.search-card.all.click&vd_source=b08dc5af1d48a9cef05162892b8abdbb
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - 链路追踪jaeger(二)